package chaoyue.study.service;

import chaoyue.study.grpc.HelloRequest;
import chaoyue.study.grpc.HelloResponse;
import chaoyue.study.grpc.HelloServiceGrpc;
import io.grpc.stub.StreamObserver;
import net.devh.boot.grpc.server.service.GrpcService;

/**
 * 注意 注解为 @GrpcService 不是 @Service
 * extends 为 proto中定义的 HelloService，后缀Grpc和ImplBase都为固定
 */
@GrpcService
public class HelloService extends HelloServiceGrpc.HelloServiceImplBase {

    /**
     * 业务逻辑方法实现
     * 方法名 sayHello 对应proto中定义的 SayHello
     * 入参 HelloRequest 对应proto中定义的 HelloRequest
     * StreamObserver 为固定参数，泛型为proto中定义的 HelloResponse
     * 返回值固定为void，返回内容通过 responseObserver 写入
     *
     */
    @Override
    public void sayHello(HelloRequest request, StreamObserver<HelloResponse> responseObserver) {
        String message = "Hello, " + request.getName() + "!";
        System.out.println(message);
        // 通过Builder构建Response对象
        HelloResponse response = HelloResponse.newBuilder().setMessage(message).build();
        // 写入返回值对象
        responseObserver.onNext(response);
        responseObserver.onCompleted();
    }
}
